package com.fare.taluo.fusionCharts;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

import com.fare.taluo.em.TimePeriod;

/**
 * 报表的时间工具
 * 
 * @author guokenye
 *
 */
public class ChartDateUtil {
	/**
	 * 获得在某些时间范围内的每一个小时，如AM  就获取 6，7，8，9，10，11，12
	 * @param timePeriods
	 * @return
	 */
	public static List<Integer> getEveryHourInTimePersiod(List<TimePeriod> timePeriods){
		Set<Integer> temp=new TreeSet<Integer>();
		if(timePeriods==null || timePeriods.isEmpty()){
			temp.addAll(_getHours(0,23));
		}else{
			for(TimePeriod t:timePeriods){
				String s_h=t.get_hhmm();
				String e_h=t.getHhmm_();
				s_h=(s_h==null||"".equals(s_h.trim())==true)?"0":s_h.substring(0, 2);
				e_h=(e_h==null||"".equals(e_h.trim())==true)?"23":e_h.substring(0, 2);
				s_h.replaceAll("^0", "");
				e_h.replaceAll("^0", "");
				temp.addAll(_getHours(Integer.parseInt(s_h),Integer.parseInt(e_h)));
			}
		}
		List<Integer> finalResult=new ArrayList<Integer>(temp);
		Collections.sort(finalResult);
		return finalResult;
	}
	
	 /**
	  * 获取指定开始和结束时间的所有小时
	  * @param start
	  * @param end
	  * @return
	  */
	public static List<Integer> getHours(int start,int end){
		List<Integer> finalResult=new ArrayList<Integer>(_getHours(start,end));
		Collections.sort(finalResult);
		return finalResult;
	}
	
	private  static Set<Integer> _getHours(int start,int end){
		Set<Integer> finalResult=new TreeSet<Integer>();
		start=start<0?0:start;
		end=end>23?23:end;
		if(start>end){//有可能晚上23点,到第二天的2点
			for(int i=start;i<=23;i++){
				finalResult.add(new Integer(i));
			}
			for(int j=0;j<=end;j++){
				finalResult.add(new Integer(j));
			}
		}else{
			for(int k=start;k<=end;k++){
				finalResult.add(new Integer(k));
			}
		}
		return finalResult;
	}
	public static void main(String[] args) {
		List<Integer> l=getHours(-1,30);
		System.out.println(l.toArray());
		
		
		List<TimePeriod> ts=new ArrayList<TimePeriod>();
		ts.add(TimePeriod.AM);
		ts.add(TimePeriod.MD);
		ts.add(TimePeriod.ND);
		ts.add(TimePeriod.ALL);
		List<Integer> LL=getEveryHourInTimePersiod(null);
	}
}
